package com.own.component.store.core.method.base;

import com.own.component.common.exception.BusinessSimpleException;

import java.time.Duration;
import java.time.LocalDateTime;

/**
 * BaseStore
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseStore extends BaseStoreMethod {

    /**
     * 设置超时时间
     *
     * @param name   唯一key
     * @param expire 指定缓存过期时间（毫秒）
     */
    default void expire(String name, long expire) {
        expire(name, Duration.ofMillis(expire));
    }

    /**
     * 设置超时时间
     *
     * @param name     唯一key
     * @param duration 指定缓存过期时间
     */
    void expire(String name, Duration duration);

    /**
     * 设置超时时间
     *
     * @param name     唯一key
     * @param deadline 超时时间
     */
    default void expire(String name, LocalDateTime deadline) {
        var duration = Duration.between(deadline, LocalDateTime.now());
        expire(name, duration);
    }

    /**
     * 获取缓存的长度
     *
     * @param name 唯一key
     * @return 长度
     */
    default Long size(String name) {
        throw new BusinessSimpleException("not support size method");
    }

}
